﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using System.Xml;

namespace GameVLTK
{
    public class NPCManager : VisibleGameEntity
    {
        private List<NPC> _NPCs;

        public List<NPC> NPCs
        {
            get { return _NPCs; }
            set { _NPCs = value; }
        }
        private int _nNPCs;

        public int nNPCs
        {
            get { return _nNPCs; }
            set { _nNPCs = value; }
        }

        public NPCManager(ContentManager content, XmlDocument doc)
        {
            this.NPCs = new List<NPC>();

            XmlNode nDS_NPCs = doc.SelectSingleNode("//DS_NPCS");

            //Lấy đường dẫn chứa các ảnh 
            String pathImages = nDS_NPCs.Attributes["Path-Images"].Value;

            //Trả về danh sách các button trong Main Menu
            XmlNodeList nlNPCs = doc.SelectNodes("//NPC");

            this.nNPCs = nlNPCs.Count;

            for (int i = 0; i < this.nNPCs; i++)
            {
                XmlNode nNPC = nlNPCs[i];

                //Tên prefix của NPC
                string prefix = nNPC.Attributes["Prefix"].Value;

                //Số lượng texture
                int nTexures = int.Parse(nNPC.Attributes["So_Luong"].Value);

                //Tạo độ của NPC
                int X = int.Parse(nNPC.Attributes["X"].Value);
                int Y = int.Parse(nNPC.Attributes["Y"].Value);

                string name = nNPC.Attributes["Name"].Value;

                //Khởi tạo button
                NPC npc = new NPC(content, pathImages + prefix,
                                             nTexures, new Vector2(X, Y), name);

              

                //Add NPC
                this.NPCs.Add(npc);

                //Add vào danh sách các đối tượng trên ForeGround
                Map.ForeGround.Add(npc);

            }

        }

        public override void Update(GameTime gameTime)
        {
            GartherInput(Mouse.GetState());

            for (int i = 0; i < this.nNPCs; i++)
                this.NPCs[i].Update(gameTime);
        }

        private void GartherInput(MouseState mouseState)
        {
            for (int i = 0; i < this.nNPCs; i++)
                if (this.NPCs[i].IsClicked(mouseState))
                {
                    Global.BroadCastEvents(Global.EVENTS.GM_NPC_CLICKED,
                                                this.NPCs[i], null, null);
                }
        }

        
        public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
        {
            for (int i = 0; i < this.nNPCs; i++)
                this.NPCs[i].Draw(gameTime,spriteBatch);
        }

        public override int OnEvent(Global.EVENTS eventID, object sender, object[] args)
        {
            int kq = 0;
            switch (eventID)
            {
                case Global.EVENTS.GM_NPC_CLICKED:
                    {
                        //Xét xem trong danh sách NPC thằng nào bắn event đã bị click đó
                        for (int i= 0; i< nNPCs; i++)
                            if (NPCs.ElementAt(i) == (NPC)sender)
                            {
                                
                            }

                        kq = 1;
                        break;
                    }
                    
                default:
                    break;
            }

            return kq;
        }



    }
}
